#include "Stack.h"


// 栈的初始化
Stack * Init_Stack(void)
{
    Stack * stack = (Stack * )malloc(sizeof(Stack));
    if (NULL == stack)
    {
        printf("创建动态空间失败\n");
        return NULL;
    }
    stack->top = -1;

    return stack;

}

// 栈的进栈
void Push_Stack(Stack * S, Elenemt_data e)
{
    // 判断 栈是否存在
    if (NULL == S)
    {
        puts("栈不存在");
        return ;
    }
    
    // 判断栈是否满了
    if (S->top == MAX - 1)
    {
        puts("栈以满");
        return ;
    }

    // 进行 top 指针的迭代
    S->top++;
    // 插入数据
    S->data[S->top] = e;

}

// 栈的出栈
void Pop_Stack(Stack * S, Elenemt_data * e)
{
    // 判断 栈是否存在
    if (NULL == S)
    {
        puts("栈不存在");
        return ;
    }
    // 判断栈是否空了
    if (-1 == S->top)
    {
        puts("栈 为 空");
        return ;
    }

    // 返回删除的元素
    e = &S->data[S->top];

    // 迭代top 指针
    S->top--;

    
}

// 栈的读取 只读取栈顶部
void Get_Top(Stack * S, Elenemt_data * e)
{
    // 判断 栈是否存在
    if (NULL == S)
    {
        puts("栈不存在");
        return ;
    }
    // 判断栈是否空了
    if (-1 == S->top)
    {
        puts("栈 为 空");
        return ;
    }
    // 读栈顶
    e = &S->data[S->top];
    printf("姓名:%s\n" , S->data[S->top].name);
}

// 栈的判空 0 为 空  1 为 非空
int Is_Empty(Stack * S)
{
    // 判断栈是否空了
    if (-1 == S->top)
    {
        puts("栈 为 空");
        return 0;
    }
    return 1;
}

// 栈的清空
void Clear_Stack(Stack * S)
{
    // 判断 栈是否存在
    if (NULL == S)
    {
        puts("栈不存在");
        return ;
    }
    // 清空操作
    S->top = -1;
}

// 栈的销毁
void Destroy_Stack(Stack ** S)
{
    // 判断 栈是否存在
    if (NULL == S)
    {
        puts("栈不存在");
        return ;
    }

    free(*S);
    S = NULL;
    return ;
}

